主题
匹配绑定窗口图片 - MatchWindowsFromPathAll
函数简介
匹配所有符合模板图片的位置信息,模板通过文件路径指定,返回相对绑定窗口坐标。
接口名称
MatchWindowsFromPathAllDLL调用
long MatchWindowsFromPathAll(long ola, int x1, int y1, int x2, int y2, string templ, double matchVal, int type, double angle, double scale);参数说明
| 参数名 | 类型 | 说明 |
|---|---|---|
| ola | 长整数型 | OLAPlug对象的指针,由 CreateCOLAPlugInterFace 接口生成。 |
| x1 | 整数型 | 查找区域的左上角X坐标 |
| y1 | 整数型 | 查找区域的左上角Y坐标 |
| x2 | 整数型 | 查找区域的右下角X坐标 |
| y2 | 整数型 | 查找区域的右下角Y坐标 |
| templ | 字符串 | 模板图片的路径,可以是多个图片,如"test.bmp|test2.bmp|test3.bmp" |
| matchVal | 双精度浮点数 | 相似度,如0.85,最大为1 |
| type | 整数型 | 匹配类型:1-灰度匹配(速度快);2-彩色匹配;3-透明匹配;4-透明彩色权重匹配;5-普通彩色匹配 |
| angle | 双精度浮点数 | 旋转角度,每次匹配后旋转指定角度继续匹配,角度越小匹配次数越多时间越长,0为不旋转速度最快 |
| scale | 双精度浮点数 | 窗口缩放比例,默认为1,可通过GetScaleFromWindows接口获取 |
示例
SDK 调用
cpp
#include "OLAPlugServer.h"
OLAPlugServer ola;
// 0,0,0,0 表示绑定窗口整个客户区
auto results = ola.MatchWindowsFromPathAll(0, 0, 0, 0, "img/template.bmp", 0.9, 1, 0, 1);
if (!results.empty() && results[0].MatchState) {
int x = results[0].X;
int y = results[0].Y;
}csharp
using OLAPlug;
var ola = new OLAPlugServer();
// 0,0,0,0 表示绑定窗口整个客户区
var results = ola.MatchWindowsFromPathAll(0, 0, 0, 0, "img/template.bmp", 0.9, 1, 0, 1);
if (results.Count > 0 && results[0].MatchState)
{
int x = results[0].X;
int y = results[0].Y;
}python
from OLAPlugServer import OLAPlugServer
ola = OLAPlugServer()
# 0,0,0,0 表示绑定窗口整个客户区
results = ola.MatchWindowsFromPathAll(0, 0, 0, 0, "img/template.bmp", 0.9, 1, 0, 1)
if results and results[0].get("MatchState"):
x = results[0]["X"]
y = results[0]["Y"]java
import com.olaplug.OLAPlugServer;
import com.olaplug.model.MatchResult;
import java.util.List;
OLAPlugServer ola = new OLAPlugServer();
// 0,0,0,0 表示绑定窗口整个客户区
List<MatchResult> results = ola.MatchWindowsFromPathAll(0, 0, 0, 0, "img/template.bmp", 0.9, 1, 0, 1);
if (results != null && !results.isEmpty() && results.get(0).MatchState) {
int x = results.get(0).X;
int y = results.get(0).Y;
}cpp
var ola = com("OlaPlug.OlaSoft")
// 0,0,0,0 表示绑定窗口整个客户区
var results = ola.MatchWindowsFromPathAll(0, 0, 0, 0, "img/template.bmp", 0.9, 1, 0, 1)vbscript
Set ola = CreateObject("OlaPlug.OlaSoft")
' 0,0,0,0 表示绑定窗口整个客户区
results = ola.MatchWindowsFromPathAll(0, 0, 0, 0, "img/template.bmp", 0.9, 1, 0, 1)text
.局部变量 ola, OLAPlug
ola.创建 ()
' 0,0,0,0 表示绑定窗口整个客户区
results = ola.MatchWindowsFromPathAll(0, 0, 0, 0, "img/template.bmp", 0.9, 1, 0, 1)aardio
import OLAPlugServer;
var ola = OLAPlugServer();
// 0,0,0,0 表示绑定窗口整个客户区
var results = ola.MatchWindowsFromPathAll(0, 0, 0, 0, "img/template.bmp", 0.9, 1, 0, 1);text
变量 ola <类型 = OLAPlugServer>
ola = 新建 OLAPlugServer
// 0,0,0,0 表示绑定窗口整个客户区
MatchDataList results = ola.MatchWindowsFromPathAll(0, 0, 0, 0, "img/template.bmp", 0.9, 1, 0, 1)cpp
#include "OLAPlugServer.h"
OLAPlugServer ola;
// 0,0,0,0 表示绑定窗口整个客户区
auto results = ola.MatchWindowsFromPathAll(0, 0, 0, 0, "img/template.bmp", 0.9, 1, 0, 1);
if (!results.empty() && results[0].MatchState) {
int32_t x = results[0].X;
}原生 DLL 调用
cpp
long instance = CreateCOLAPlugInterFace();
long ptr = MatchWindowsFromPathAll(instance, 0, 0, 0, 0, "img/template.bmp", 0.9, 1, 0, 1);
if (ptr != 0) {
char json[8192] = {0};
GetStringFromPtr(ptr, json, sizeof(json));
int matchState = 0, x = 0, y = 0, width = 0, height = 0, index = 0;
double matchVal = 0, angle = 0;
ParseMatchImageAllJson(instance, json, 0, &matchState, &x, &y, &width, &height, &matchVal, &angle, &index);
FreeStringPtr(instance, ptr);
}csharp
using System.Runtime.InteropServices;
using System.Text;
[DllImport("OLAPlug_x64.dll", CallingConvention = CallingConvention.StdCall)]
static extern int GetStringFromPtr(long ptr, StringBuilder lpString, int size);
[DllImport("OLAPlug_x64.dll", CallingConvention = CallingConvention.StdCall)]
static extern int FreeStringPtr(long ptr);
[DllImport("OLAPlug_x64.dll", CallingConvention = CallingConvention.StdCall)]
static extern int GetStringSize(long ptr);
[DllImport("OLAPlug_x64.dll", CallingConvention = CallingConvention.StdCall)]
static extern long CreateCOLAPlugInterFace();
[DllImport("OLAPlug_x64.dll", CallingConvention = CallingConvention.StdCall)]
static extern long MatchWindowsFromPathAll(long ola, int x1, int y1, int x2, int y2, string templ, double matchVal, int type, double angle, double scale);
[DllImport("OLAPlug_x64.dll", CallingConvention = CallingConvention.StdCall)]
static extern int ParseMatchImageAllJson(string str, int parseIndex, out int matchState, out int x, out int y, out int width, out int height, out double matchVal, out double angle, out int index);
long instance = CreateCOLAPlugInterFace();
long ptr = MatchWindowsFromPathAll(instance, 0, 0, 0, 0, "img/template.bmp", 0.9, 1, 0, 1);
if (ptr != 0) {
StringBuilder sb = new StringBuilder(GetStringSize(ptr) + 1);
GetStringFromPtr(ptr, sb, sb.Capacity);
FreeStringPtr(ptr);
ParseMatchImageAllJson(sb.ToString(), 0, out int matchState, out int x, out int y, out int w, out int h, out double mv, out double ang, out int idx);
}python
from ctypes import CDLL, c_int, c_int64
ola = CDLL("OLAPlug_x64.dll")
ola.CreateCOLAPlugInterFace.restype = c_int64
instance = ola.CreateCOLAPlugInterFace()
ptr = ola.MatchWindowsFromPathAll(instance, ...)
# 原生返回 JSON 数组指针,用 ParseMatchImageAllJson(instance, json, 0, ...) 取第一项返回值
字符串指针,返回JSON数组格式的匹配结果。多图识别时Index字段标识是第几个图片返回的结果,索引从0开始。DLL调用返回字符串指针地址,需要调用 FreeStringPtr 接口释放内存。
返回数据格式:
json
[{
"MatchVal": 0.85,
"MatchState": true,
"Index": 0,
"Angle": 45.0,
"X": 100,
"Y": 200,
"Width": 100,
"Height": 100
}]| 字段名 | 类型 | 说明 |
|---|---|---|
| MatchVal | 浮点数 | 匹配相似度。 |
| MatchState | 布尔 | 是否匹配成功。 |
| Index | 整数 | 结果索引(从 0 开始)。 |
| Angle | 浮点数 | 匹配角度。 |
| X | 整数 | X 坐标。 |
| Y | 整数 | Y 坐标。 |
| Width | 整数 | 宽度。 |
| Height | 整数 | 高度。 |
注意事项
- x1、y1、x2、y2都传0时,将搜索整个窗口客户区
- 返回的坐标是相对于绑定窗口客户区的坐标
